package org.TCC_NOVO.server.Transferencia;

import java.sql.Connection;
import java.sql.Statement;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUpload;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class ServletUpload extends HttpServlet{

     private Connection conn;
     private Statement stmt;

    //Initialize global variables
    public void init() throws ServletException {
    }

    private void Conectar(){
        try {
            /*
            Class.forName("org.firebirdsql.jdbc.FBDriver");
            conn = DriverManager.getConnection(
               "jdbc:firebirdsql:localhost/3050:E:/Pessoal/FURB/TCC_II/Banco_Dados/TCC.fdb",
               "sysdba",
               "masterkey");
            stmt = conn.createStatement();
            */

             //Abaixo é para fazer a conexão com o MySQL
             String url = "jdbc:mysql://localhost:3306/oas";
             //String url = "jdbc:mysql://localhost:3306/dbmy_81490";
             String user = "root";
             //String user = "DBMY_81490";
             String pass = "root";
             //String pass = "so93cvke";

             try {
                Class.forName("com.mysql.jdbc.Driver");
                conn = DriverManager.getConnection(url,user,pass);
                stmt = conn.createStatement();
             }
                catch (ClassNotFoundException e){
                    System.out.println("Classe não encontrada");
             }
             
         } catch (Exception e) {
             System.out.println("Não foi possível conectar ao banco: " + e.getMessage());
         }
    }

    //Process the HTTP Post request
    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }                                                 

    public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

            boolean isMultiPart = FileUpload.isMultipartContent(request);
            if (isMultiPart) {
                Conectar();
                FileItemFactory factory = new DiskFileItemFactory();
                ServletFileUpload upload = new ServletFileUpload(factory);
                try {
                    List items = upload.parseRequest(request);
                    Iterator iter = items.iterator();
                    while (iter.hasNext()) {
                        FileItem item = (FileItem) iter.next();
                        if (!item.isFormField()) {
                            if (item.getName().length() > 0) {
                                this.inserirArquivoDiretorio(item);
                            }
                        }
                    }
                }
            catch (FileUploadException ex) {
                ex.printStackTrace();
            }
            catch (Exception ex) {
                ex.printStackTrace();
            }}
    }


    private void inserirArquivoDiretorio(FileItem item) throws IOException {

            //Pega o diretório /logo dentro do diretório atual de onde a
            //aplicação está rodando
            //String caminho = getServletContext().getRealPath("/Uploads") +item.getFieldName()+ "/";
            String caminho = "C:/Uploads";

            // Cria o diretório caso ele não exista
            File diretorio = new File(caminho);
            if (!diretorio.exists()){
                diretorio.mkdir();
            }

            //Tipo de diretório (de tarefas ou de unidades)
            String sTipo = item.getFieldName().split(",")[0];
            //ID da tabela que deverá ser atualizada o diretório onde está o arquivo
            String sID = item.getFieldName().split(",")[1];
            //Nome Projeto
            String sNmProjeto = item.getFieldName().split(",")[2];
            //Nome Unidade
            String sNmUnidade = item.getFieldName().split(",")[3];

            caminho = diretorio + "/"+ sTipo;
            // Cria o diretório caso ele não exista
            File diretorio2 = new File(caminho);
            if (!diretorio2.exists()){
                diretorio2.mkdir();
            }

            caminho = diretorio + "/"+ sTipo + "/"+ sNmProjeto;
            // Cria o diretório caso ele não exista
            File diretorio3 = new File(caminho);
            if (!diretorio3.exists()){
                diretorio3.mkdir();
            }

            caminho = diretorio + "/"+ sTipo + "/"+ sNmProjeto+ "/"+ sNmUnidade;
            // Cria o diretório caso ele não exista
            File diretorio4 = new File(caminho);
            if (!diretorio4.exists()){
                diretorio4.mkdir();
            }

            // Mandar o arquivo para o diretório informado
            String nome = item.getName();
            String arq[] = nome.split("/");
            for (int i = 0; i < arq.length; i++) {
                nome = arq[i];
            }

            File file = new File(diretorio4, nome);
            FileOutputStream output = new FileOutputStream(file);
            InputStream is = item.getInputStream();
            byte[] buffer = new byte[2048];
            int nLidos;
            while ((nLidos = is.read(buffer)) >= 0) {
                output.write(buffer, 0, nLidos);
            }
            output.flush();
            output.close();

            String sSQL = "";
            caminho = "C:/Uploads/"+sTipo+"/"+sNmProjeto+"/"+sNmUnidade+"/"+nome;
            if (sTipo.equals("Tarefas"))
                sSQL = "Update Atividade_Roteiro set Nome_Arquivo = '"+caminho+"' where ID = "+sID;
            else//senão é unidade
                sSQL = "Update Unidade set Nome_Arquivo = '"+caminho+"' where ID = "+sID;
            try {
                //MessageBox.alert(sSQL);
                System.out.print(sSQL);
                stmt.execute(sSQL);
            }catch(SQLException ex) {
                System.err.println("SQLException: " + ex.getMessage());
            }
    }

}
